package com.example.user.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.*;
import lombok.experimental.Accessors;
import org.springframework.data.elasticsearch.annotations.Document;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 用户信息表
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("users")
@Document(indexName = "users_index")
public class Users implements Serializable {

    private static final long serialVersionUID = 1L;

    /** 主键 */
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /** 用户名 */
    private String username;

    /** 密码 */
    private String password;

    /** 电子邮件 */
    private String email;

    /** 电话号码 */
    private String phone;

    /** 头像URL */
    private String avatarUrl;

    /** 性别 */
    private String gender;

    /** 出生日期 */
    private LocalDate birthday;

    /** 创建时间 */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createdAt;

    /** 更新时间 */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updatedAt;

    /** 最后登录时间 */
    private LocalDateTime lastLogin;

    /** 状态：1=活跃，0=禁用 */
    private Boolean status;

    /** 用户积分 */
    private Integer score;

    /** 登录次数 */
    private Integer loginCount;

    /** 注册IP */
    private String registrationIp;

    /** 最后登录IP */
    private String lastLoginIp;

    /** 激活码 */
    private String activationCode;

    /** 激活码过期时间 */
    private LocalDateTime activationExpiration;

    /** 是否订阅了 newsletter：1=是，0=否 */
    private Boolean isSubscribed;

    /** 记住我 token */
    private String rememberToken;

    /** 软删除时间 */
    @TableLogic
    private LocalDateTime deletedAt;

    private String description;
}
